<?php
class LibroVentasController extends AppController {
    var $name = 'LibroVentas';
    var $uses = array('TiendaLocal');
    var $components = array('Interfaz','Vista','Maestro','Util');
    var $helpers = array('Html','Ajax','Javascript','Vista','Interfaz');
    var $layout = "ajax";

    function beforeFilter(){
        //$this->validar();
    }
    
    
    public function reporte_excel_ind($valores = null, $encrip = "no") {
        //localhost:50014/LibroVentas/reporte_excel_ind/desde_-_2015-01-01_._hasta_-_2015-01-28_._tienda_-_T001_._tipo_-_1
        if ($valores != null){
                $valAr = explode('_._', $valores);
                if($encrip == "si"){
                    //$this->permisos_opcion_individual('LIBRO DE VENTAS', 'ESTATUS', 'GENERAR EXCEL');
                    $desde = $this->Interfaz->id($valAr['0']);
                    $hasta = $this->Interfaz->id($valAr['1']);
                    $tienda = $this->Interfaz->id($valAr['2']);
                    $tipo = $valAr['3'];
                }
                else{
                    $desde = str_replace('desde_-_', '', $valAr['0']);
                    $hasta = str_replace('hasta_-_', '', $valAr['1']);
                    $tienda = $this->Tienda->find('first', array('fields' => 'id', 'conditions' => array('Tienda.codigo' => str_replace('tienda_-_', '', $valAr['2']))));
                    $tienda = (string) $tienda['Tienda']['id'];
                    $tipo = str_replace('tipo_-_', '', $valAr['3']);
                }

        $fdesde = date("d-m-Y", strtotime($desde));
        $fhasta = date("d-m-Y", strtotime($hasta));
        //$sql="select * from fnc_reporte_libro_ventas('$desde','$hasta','general',%tienda_id%) as (id bigint, fecha date, documento text, nombre text, numero text, numero_control text, est_fact character varying(1), nota_d text, nota_c text, transaccion text, referencia text, monto double precision, venta_sin_iva numeric,iva_parcial numeric, base_parcial numeric, monto_iva_parcial numeric, iva_gral numeric, base_parcial_gral numeric, monto_iva_gral numeric, total_iva numeric);";
        $sql="SELECT t.* FROM (select * from fnc_reporte_libro_ventas('$desde','$hasta','general') as (id bigint, fecha date, documento text, nombre text, numero text, numero_control text, est_fact character varying(1), nota_d text, nota_c text, transaccion text, referencia text, monto double precision, venta_sin_iva numeric,iva_parcial numeric, base_parcial numeric, monto_iva_parcial numeric, iva_gral numeric, base_parcial_gral numeric, monto_iva_gral numeric, total_iva numeric)) AS t ORDER BY t.numero_control ASC;";
        $data = $this->Maestro->sql_puntos($sql, $tienda, '%tienda_id%');
        $nombretienda = $this->Tienda->find('first', array('fields' => 'nombre', 'conditions' => array('id' => $tienda)));
        $this->set('nombretienda', $nombretienda['Tienda']['nombre']);
        $this->set('tienda', $tienda);
        $this->set('tipo', $tipo);
        $this->set('desde', $fdesde);
        $this->set('hasta', $fhasta);
        $this->set('data', $data);
        }
        else {
            $this->Vista->mensaje('Ha surgido un error inesperado!', 'Error');
            $this->render("../" . PRINCIPAL . "/mensajes");
        }
    }

    
    
    function index($busq=null) {
        $this->permisos_menu_individual('LIBRO DE VENTAS');
        $this->bloquear_buscador();
        $this->Vista->title("Libro de Ventas");
    }

    public function filtro() {
        $this->permisos_accion_individual('LIBRO DE VENTAS', 'FILTRO');
        $tiendas = $this->Session->read('tiendas_disponibles');
        $listaTiendas = $this->Maestro->listar_tienda($tiendas); //listar_tienda_usuarios($tiendas);
        $listaTiendasPermitidas = $this->Util->tiendasActivas($listaTiendas);
        $this->set('listaTiendas', $listaTiendasPermitidas);
    }

    public function busqueda_filtro() {
        $this->permisos_menu_individual('LIBRO DE VENTAS');
        if(!$this->Vista->empyt($this->request->data)){
            extract($this->request->data);
            if(strtotime($desde) > strtotime($hasta)){
                $this->Vista->mensaje("la fecha ".$hasta." es menor a ".$desde."", 'ERROR: Rango de fecha inválido');
                $this->set('fec_d',null);
                $this->set('fec_h',null);
            }else{
                $this->Vista->cerrar_ventana($vent_filtro);
                $this->Vista->title('FILTRO LIBRO DE VENTA: ('.$desde.' AL '.$hasta.')');
                $fdesde = date("Y-m-d", strtotime($desde));
                $fhasta = date("Y-m-d", strtotime($hasta));
                //$sql="select * from fnc_reporte_libro_ventas('$fdesde','$fhasta','general',%tienda_id%) as (id bigint, fecha date, documento text, nombre text, numero text, numero_control text, est_fact character varying(1), nota_d text, nota_c text, transaccion text, referencia text, monto double precision, venta_sin_iva numeric,iva_parcial numeric, base_parcial numeric, monto_iva_parcial numeric, iva_gral numeric, base_parcial_gral numeric, monto_iva_gral numeric, total_iva numeric);";
                $sql="SELECT t.* FROM (select * from fnc_reporte_libro_ventas('$fdesde','$fhasta','general','%tienda_id%') as (id bigint, fecha date, documento text, nombre text, numero text, numero_control text, est_fact character varying(1), nota_d text, nota_c text, transaccion text, referencia text, monto double precision, venta_sin_iva numeric,iva_parcial numeric, base_parcial numeric, monto_iva_parcial numeric, iva_gral numeric, base_parcial_gral numeric, monto_iva_gral numeric, total_iva numeric)) AS t ORDER BY t.numero_control ASC;";
                $data = $this->Maestro->sql_puntos($sql, $tiendas, '%tienda_id%');
                if($data[1] !== null){
                    $ventasIva[]=0; $ventasExento[]=0; $totalIva[]=0;
                    foreach ($data as $tienda => $value) {
                       /* if($value[$tienda] == null){
                                $a=$a.",".$a;
                                $this->filtro();
                                $this->render('filtro');
                                $nombreTienda = $this->TiendaLocal->find('first', array('fields' => array('codigo', 'nombre'), 'conditions' => array('id' => $tienda)));
                                $this->Vista->mensaje("No hay datos en la tienda ".$nombreTienda['TiendaLocal']['codigo'].": ".$nombreTienda['TiendaLocal']['nombre'], 'ERROR');
                                @$ventasIva[$tienda] = "No hay datos";
                                @$ventasExento[$tienda] = "No hay datos";
                                @$totalIva[$tienda] = "No hay datos";
                        }else{
                         */ for($i=0;$i<count($value);$i++){
                                @$ventasIva[$tienda] += $value[$i]['monto'];
                                @$ventasExento[$tienda] += $value[$i]['venta_sin_iva'];
                                @$totalIva[$tienda] += $value[$i]['total_iva'];
                            }
                        //}
                    }

                    $this->set('ventasIva',$ventasIva);
                    $this->set('ventasExento',$ventasExento);
                    $this->set('totalIva',$totalIva);
                    $listaTiendas = $this->Tienda->find('all', array('fields' => array('codigo', 'nombre','id'), 'conditions' => array('Tienda.id' => $tiendas), 'order' => 'Tienda.id'));
                    $this->set('listaTiendas',$listaTiendas);
                    $this->set('fec_d',$fdesde);
                    $this->set('fec_h',$fhasta);
                    $this->set('datosFiltro', $this->serializador($this->request->data, 2));
                }else{
                    $this->Vista->mensaje('No hay informacion para mostrar!', 'Error');
                    $this->render('index');
                }
            }
        }else{
            $this->Vista->mensaje("Faltan datos requeridos!!!", 'ERROR');
        }
    }

    public function reporte_excel($tipo,$datosFiltro) {
            //$tipo==1 ? $this->permisos_accion_individual('LIBRO DE VENTAS', 'EXCEL') : $this->permisos_accion_individual('LIBRO DE VENTAS', 'CAL');
            if (!empty($datosFiltro)) {
                $this->request->data = $this->serializador($datosFiltro, 1);
            }
            extract($this->request->data);
            $fdesde = date("Y-m-d", strtotime($desde));
            $fhasta = date("Y-m-d", strtotime($hasta));
            //$sql="select * from fnc_reporte_libro_ventas('$fdesde','$fhasta','general',%tienda_id%) as (id bigint, fecha date, documento text, nombre text, numero text, numero_control text, est_fact character varying(1), nota_d text, nota_c text, transaccion text, referencia text, monto double precision, venta_sin_iva numeric,iva_parcial numeric, base_parcial numeric, monto_iva_parcial numeric, iva_gral numeric, base_parcial_gral numeric, monto_iva_gral numeric, total_iva numeric);";
            $sql="SELECT t.* FROM (select * from fnc_reporte_libro_ventas('$fdesde','$fhasta','general','%tienda_id%') as (id bigint, fecha date, documento text, nombre text, numero text, numero_control text, est_fact character varying(1), nota_d text, nota_c text, transaccion text, referencia text, monto double precision, venta_sin_iva numeric,iva_parcial numeric, base_parcial numeric, monto_iva_parcial numeric, iva_gral numeric, base_parcial_gral numeric, monto_iva_gral numeric, total_iva numeric)) AS t ORDER BY t.numero_control ASC;";
            $data = $this->Maestro->sql_puntos($sql, $tiendas, '%tienda_id%');
            $listaCodigo = $this->Tienda->find('list', array('fields' => array('id', 'nombre'), 'conditions' => array('Tienda.id >' => '0'), 'order' => 'Tienda.id'));
            $this->set('tienda_codigos', $listaCodigo);
            $this->set('ls_id_tiendas',$tiendas);
            $this->set('tipo',$tipo);
            $this->set('desde',$desde);
            $this->set('hasta',$hasta);
            $this->set('data',$data);
    }

    public function filtro_buscar($id_tienda, $desde, $hasta) {
        $this->permisos_opcion_individual('LIBRO DE VENTAS', 'ESTATUS', 'VER');
        $idTienda = $this->Interfaz->id($id_tienda);
        $desde = $this->Interfaz->id($desde);
        $hasta = $this->Interfaz->id($hasta);
        $BdPunto = $this->TiendaLocal->find('first', array('fields' => array('TiendaLocal.base_datos', 'TiendaLocal.codigo', 'TiendaLocal.nombre'), 'conditions' => array('TiendaLocal.id' => $idTienda)));
        $nombreTienda = $BdPunto['TiendaLocal']['nombre'];
        $codigoTienda = $BdPunto['TiendaLocal']['codigo'];
        $BdPunto = $BdPunto['TiendaLocal']['base_datos'];
        $ObjCajas = $this->Maestro->modelo('punto', 'Punto', $BdPunto);
        $cajas = $ObjCajas->find('list', array('fields' => array('id','nombre'), 'order' => 'id'));
        $this->set('cajas', $cajas);
        $this->set('idTienda', $idTienda);
        $this->set('nombreTienda', $nombreTienda);
        $this->set('codigoTienda', $codigoTienda);
        $this->set('desde', $desde);
        $this->set('hasta', $hasta);
    }

    public function reporte_caja($id_vent,$desde,$hasta,$idTienda,$caja) {
        if(!empty($id_vent) && !empty($desde) && !empty($hasta) && !empty($idTienda)){
            $id_vent = $this->Interfaz->id($id_vent);
            $desde = $this->Interfaz->id($desde);
            $hasta = $this->Interfaz->id($hasta);
            $idTienda = $this->Interfaz->id($idTienda);
            $BdPunto = $this->TiendaLocal->find('first', array('fields' => array('TiendaLocal.base_datos'), 'conditions' => array('TiendaLocal.id' => $idTienda)));
            $BdPunto = $BdPunto['TiendaLocal']['base_datos'];
            $ObjCajas = $this->Maestro->modelo('punto', 'Punto', $BdPunto);
            $nombreCaja = $ObjCajas->find('first', array('fields' => 'nombre', 'conditions' => array('id' => $caja)));
            $tienda[] = $idTienda;
            //$sql="select * from fnc_reporte_libro_ventas('$desde','$hasta','detallada',$caja) as (id bigint, fecha date, documento text, nombre text, numero text, numero_control text, est_fact character varying(1), nota_d text, nota_c text, transaccion text, referencia text, monto double precision, venta_sin_iva numeric,iva_parcial numeric, base_parcial numeric, monto_iva_parcial numeric, iva_gral numeric, base_parcial_gral numeric, monto_iva_gral numeric, total_iva numeric);";
            $sql="SELECT t.* FROM (select * from fnc_reporte_libro_ventas('$desde','$hasta','detallada',$caja) as (id bigint, fecha date, documento text, nombre text, numero text, numero_control text, est_fact character varying(1), nota_d text, nota_c text, transaccion text, referencia text, monto double precision, venta_sin_iva numeric,iva_parcial numeric, base_parcial numeric, monto_iva_parcial numeric, iva_gral numeric, base_parcial_gral numeric, monto_iva_gral numeric, total_iva numeric)) AS t ORDER BY t.numero_control ASC;";
            $data = $this->Maestro->sql_puntos($sql, $tienda, '%tienda_id%');
            $datosFiltro=array();
            $datosFiltro['vent_filtro']=$id_vent;
            $datosFiltro['desde']=$desde;
            $datosFiltro['hasta']=$hasta;
            $datosFiltro['idTienda']=$idTienda;
            $datosFiltro['caja']=$caja;
            if($data[$idTienda]==null){
                $this->Vista->mensaje("No hay datos para mostrar", 'ERROR');
                die();
            }else {
                $this->set('nombreCaja', $nombreCaja['Punto']['nombre']);
                $this->set('datosFiltro', $this->serializador($datosFiltro, 2));
                $this->set('desde', $desde);
                $this->set('hasta', $hasta);
                $this->set('tienda', $idTienda);
                $this->set('caja', $caja);
            }
        }else{
            $this->Vista->mensaje("Hubo un problema inesperado, por favor intente de nuevo", 'ERROR');
        }
    }

    public function reporte_caja_excel($datosFiltro,$tipo) {
        if(!empty($datosFiltro)) {
            $this->request->data = $this->serializador($datosFiltro, 1);
            extract($this->request->data);
            $tienda[]=$idTienda;
            //$sql="select * from fnc_reporte_libro_ventas('$desde','$hasta','detallada',$caja) as (id bigint, fecha date, documento text, nombre text, numero text, numero_control text, est_fact character varying(1), nota_d text, nota_c text, transaccion text, referencia text, monto double precision, venta_sin_iva numeric,iva_parcial numeric, base_parcial numeric, monto_iva_parcial numeric, iva_gral numeric, base_parcial_gral numeric, monto_iva_gral numeric, total_iva numeric);";
            $sql="SELECT t.* FROM (select * from fnc_reporte_libro_ventas('$desde','$hasta','detallada',$caja) as (id bigint, fecha date, documento text, nombre text, numero text, numero_control text, est_fact character varying(1), nota_d text, nota_c text, transaccion text, referencia text, monto double precision, venta_sin_iva numeric,iva_parcial numeric, base_parcial numeric, monto_iva_parcial numeric, iva_gral numeric, base_parcial_gral numeric, monto_iva_gral numeric, total_iva numeric)) AS t ORDER BY t.numero_control ASC;";
            $data = $this->Maestro->sql_puntos($sql, $tienda, '%tienda_id%');
            $nombretienda = $this->Tienda->find('first', array('fields' => 'nombre', 'conditions' => array('id' => $idTienda)));
            $this->set('nombretienda', $nombretienda);
            $BdPunto = $this->TiendaLocal->find('first', array('fields' => array('TiendaLocal.base_datos'), 'conditions' => array('TiendaLocal.id' => $idTienda)));
            $BdPunto = $BdPunto['TiendaLocal']['base_datos'];
            $ObjCajas = $this->Maestro->modelo('punto', 'Punto', $BdPunto);
            $cajas = $ObjCajas->find('first', array('fields' => 'nombre', 'conditions' => array('id' => $caja)));
            $this->set('nombreCaja', $cajas['Punto']['nombre']);
            $this->set('tienda', $idTienda);
            $this->set('tipo',$tipo);
            $this->set('desde',$desde);
            $this->set('hasta',$hasta);
            $this->set('data',$data);
        }else{
            $this->Vista->mensaje("Hubo un problema cargando la data, por favor comuniquese con el administrador", 'ERROR');
        }
    }

    public function ver_reporte($desde,$hasta,$tienda,$caja=null) {
        //$this->permisos_opcion_individual('LIBRO DE VENTAS', 'ESTATUS', 'GENERAR EXCEL');
        $desde = $this->Interfaz->id($desde);
        $hasta = $this->Interfaz->id($hasta);
        $tienda = $this->Interfaz->id($tienda);
        $fdesde = date("d-m-Y", strtotime($desde));
        $fhasta = date("d-m-Y", strtotime($hasta));
        if(!empty($caja)){
            $caja = $this->Interfaz->id($caja);
            //$sql="select * from fnc_reporte_libro_ventas('$desde','$hasta','detallada',$caja) as (id bigint, fecha date, documento text, nombre text, numero text, numero_control text, est_fact character varying(1), nota_d text, nota_c text, transaccion text, referencia text, monto double precision, venta_sin_iva numeric,iva_parcial numeric, base_parcial numeric, monto_iva_parcial numeric, iva_gral numeric, base_parcial_gral numeric, monto_iva_gral numeric, total_iva numeric);";
            $sql="SELECT t.* FROM (select * from fnc_reporte_libro_ventas('$desde','$hasta','detallada',$caja) as (id bigint, fecha date, documento text, nombre text, numero text, numero_control text, est_fact character varying(1), nota_d text, nota_c text, transaccion text, referencia text, monto double precision, venta_sin_iva numeric,iva_parcial numeric, base_parcial numeric, monto_iva_parcial numeric, iva_gral numeric, base_parcial_gral numeric, monto_iva_gral numeric, total_iva numeric)) AS t ORDER BY t.numero_control ASC;";
            $BdPunto = $this->TiendaLocal->find('first', array('fields' => array('TiendaLocal.base_datos'), 'conditions' => array('TiendaLocal.id' => $tienda)));
            $BdPunto = $BdPunto['TiendaLocal']['base_datos'];
            $ObjCajas = $this->Maestro->modelo('punto', 'Punto', $BdPunto);
            $nombreCaja = $ObjCajas->find('first', array('fields' => 'nombre', 'conditions' => array('id' => $caja)));
            $this->set('nombreCaja', $nombreCaja['Punto']['nombre']);
        }else {
            //$sql="select * from fnc_reporte_libro_ventas('$desde','$hasta','general',%tienda_id%) as (id bigint, fecha date, documento text, nombre text, numero text, numero_control text, est_fact character varying(1), nota_d text, nota_c text, transaccion text, referencia text, monto double precision, venta_sin_iva numeric,iva_parcial numeric, base_parcial numeric, monto_iva_parcial numeric, iva_gral numeric, base_parcial_gral numeric, monto_iva_gral numeric, total_iva numeric);";
            $sql="SELECT t.* FROM (select * from fnc_reporte_libro_ventas('$desde','$hasta','general','%tienda_id%') as (id bigint, fecha date, documento text, nombre text, numero text, numero_control text, est_fact character varying(1), nota_d text, nota_c text, transaccion text, referencia text, monto double precision, venta_sin_iva numeric,iva_parcial numeric, base_parcial numeric, monto_iva_parcial numeric, iva_gral numeric, base_parcial_gral numeric, monto_iva_gral numeric, total_iva numeric)) AS t ORDER BY t.numero_control ASC;";
        }
        $data = $this->Maestro->sql_puntos($sql, $tienda, '%tienda_id%');
        $nombretienda = $this->Tienda->find('first', array('fields' => 'nombre', 'conditions' => array('id' => $tienda)));
        $this->set('nombretienda', $nombretienda);
        $this->set('tienda', $tienda);
        $this->set('desde',$fdesde);
        $this->set('hasta',$fhasta);
        $this->set('data',$data);
    }

}
?>